
//const UglifyJsPlugin = require('uglifyjs-webpack-plugin')
const VueFilenameInjector = require('./tools/vue-filename-injector')

// 拼接路径
const resolve = dir => require('path').join(__dirname, dir)

// 增加环境变量
process.env.VUE_APP_VERSION = require('./package.json').version
process.env.VUE_APP_BUILD_TIME = require('dayjs')().format('YYYY-M-D HH:mm:ss')

// 基础路径 注意发布之前要先修改这里
let publicPath = '/'
// 测试，Ueditor使用
// const serverPath = 'http://192.168.1.250:30002'
// 生产
// const serverPath = 'http://console.shengxinghuicai.com:30002'
const serverPath = process.env.VUE_APP_SERVER_URL
const PORT = process.env.VUE_APP_PORT

module.exports = {
  publicPath, // 根据你的实际情况更改这里
  lintOnSave: true,
  
  devServer: {
    port: PORT, //端口自己定,修改端口后，获取token异常，具体原因待跟进解决
    publicPath, // 和 publicPath 保持一致
    // 设置代理
    proxy: {
      "/jsp": {
        target: serverPath, //'http://localhost:30002', // 域名
        changeOrigin: true, //开启代理：在本地会创建一个虚拟服务端，然后发送请求的数据，并同时接收请求的数据，这样服务端和服务端进行数据的交互就不会有跨域问题
        pathRewrite: {
          "^/jsp": "/api/v1/console/file/upload"
        }
      },
      "/js": {
          target: serverPath, //'http://localhost:30002', // 域名
          changeOrigin: true, //开启代理：在本地会创建一个虚拟服务端，然后发送请求的数据，并同时接收请求的数据，这样服务端和服务端进行数据的交互就不会有跨域问题
          pathRewrite: {
            "^/js": "/api/v1/console/file/upload"
          }
        }
    }

  },
  
  css: {
    loaderOptions: {
      // 设置 scss 公用变量文件
      sass: {
        data: `@import '~@/assets/style/public.scss';`
      }
    }
  },
  // 默认设置: https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-service/lib/config/base.js
  chainWebpack: config => {
    /**
     * 删除懒加载模块的 prefetch preload，降低带宽压力
     * https://cli.vuejs.org/zh/guide/html-and-static-assets.html#prefetch
     * https://cli.vuejs.org/zh/guide/html-and-static-assets.html#preload
     * 而且预渲染时生成的 prefetch 标签是 modern 版本的，低版本浏览器是不需要的
     */
    config.plugins
      .delete('prefetch')
      .delete('preload')
    // 解决 cli3 热更新失效 https://github.com/vuejs/vue-cli/issues/1559
    config.resolve
      .symlinks(true)
    config
      // 开发环境
      .when(process.env.NODE_ENV === 'development',
        // sourcemap不包含列信息
        config => config.devtool('cheap-source-map')
      )
      // TRAVIS 构建 vue-loader 添加 filename
      .when(process.env.VUE_APP_BUILD_MODE === 'TRAVIS' || process.env.NODE_ENV === 'development',
        VueFilenameInjector(config, {
          propName: process.env.VUE_APP_SOURCE_VIEWER_PROP_NAME
        })
      )
//      // 非开发环境
//      .when(process.env.NODE_ENV !== 'development', config => {
//        config.optimization
//          .minimizer([
//            new UglifyJsPlugin({
//              uglifyOptions: {
//                // 移除 console
//                // 其它优化选项 https://segmentfault.com/a/1190000010874406
//                compress: {
//                  drop_console: true,
//                  drop_debugger: true,
//                  pure_funcs: ['console.log']
//                }
//              }
//            })
//          ])
//      })
    // i18n
    config.module
      .rule('i18n')
      .resourceQuery(/blockType=i18n/)
      .use('i18n')
      .loader('@kazupon/vue-i18n-loader')
      .end()
    // svg
    const svgRule = config.module.rule('svg')
    svgRule.uses.clear()
    svgRule
      .include
      .add(resolve('src/assets/svg-icons/icons'))
      .end()
      .use('svg-sprite-loader')
      .loader('svg-sprite-loader')
      .options({
        symbolId: 'd2-[name]'
      })
      .end()
    // image exclude
    const imagesRule = config.module.rule('images')
    imagesRule
      .test(/\.(png|jpe?g|gif|webp|svg)(\?.*)?$/)
      .exclude
      .add(resolve('src/assets/svg-icons/icons'))
      .end()
    // 重新设置 alias
    config.resolve.alias
      .set('@api', resolve('src/api'))
    // 判断环境加入模拟数据
    // const entry = config.entry('app')
    // if (process.env.VUE_APP_BUILD_MODE !== 'nomock') {
    //   entry
    //     .add('@/mock')
    //     .end()
    // }
  }
}
